﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Prism.Games.GalEngine.Scripts.Data;
using Prism.Games.GalEngine.Scripts.Data.SceneElements;
using Prism.Games.GalEngine.Scripts.FunctionModel;
using Prism.Games.GalEngine.Scripts.Data.ResourceCollection;
using Prism.Games.GalEngine.Scripts.Data.BranchSystem;

namespace Prism.Games.GalEngine.Scripts
{
    /// <summary>
    /// 游戏场景，在Gal游戏进行时候内容最丰富的场景。
    /// </summary>
    [Serializable]
    public class GamingScene : Scene
    {
        public GamingScene(IItemIncrementalMarkable host)
            : base(host)
        {
            this.VerticalImages = new VerticalImageCollection();
        }

        private BackgroundImage backgroundImage;
        public BackgroundImage BackgroundImage
        {
            get
            {
                return this.backgroundImage;
            }
            set
            {
                if (value != this.backgroundImage)
                {
                    this.backgroundImage = value;
                    this.OnPropertyChanged("BackgroundImage");
                }
            }
        }

        private BackgroundMusic backgroundMusic;
        public BackgroundMusic BackgroundMusic
        {
            get
            {
                return this.backgroundMusic;
            }
            set
            {
                if (value != this.backgroundMusic)
                {
                    this.backgroundMusic = value;
                    this.OnPropertyChanged("BackgroundMusic");
                }
            }
        }

        private EffectSound effectSound;
        public EffectSound EffectSound
        {
            get
            {
                return this.effectSound;
            }
            set
            {
                if (value != this.effectSound)
                {
                    this.effectSound = value;
                    this.OnPropertyChanged("EffectSound");
                }
            }
        }

        private Dialogue dialogue;
        public Dialogue Dialogue
        {
            get
            {
                return this.dialogue;
            }
            set
            {
                if (value != this.dialogue)
                {
                    this.dialogue = value;
                    this.OnPropertyChanged("Dialogue");
                }
            }
        }

        private VerticalImageCollection verticalImages;
        public VerticalImageCollection VerticalImages
        {
            get
            {
                return this.verticalImages;
            }
            set
            {
                if (value != this.verticalImages)
                {
                    this.verticalImages = value;
                    this.OnPropertyChanged("VerticalImages");
                }
            }
        }

        private ExpressionImage expressionImage;
        public ExpressionImage ExpressionImage
        {
            get { return expressionImage; }
            set
            {
                if (value != this.expressionImage)
                {
                    expressionImage = value;
                    this.OnPropertyChanged("ExpressionImage");
                }
            }
        }

        private Vocal vocal;
        public Vocal Vocal
        {
            get
            {
                return this.vocal;
            }
            set
            {
                if (value != this.vocal)
                {
                    this.vocal = value;
                    this.OnPropertyChanged("Vocal");
                }
            }
        }

        private Role role;
        public Role Role
        {
            get
            {
                return this.role;
            }
            set
            {
                if (value != this.role)
                {
                    this.role = value;
                    this.OnPropertyChanged("Role");
                }
            }
        }

        private Selector selector;
        public Selector Selector
        {
            get { return selector; }
            set
            {
                if (value != this.selector)
                {
                    this.selector = value;
                    this.OnPropertyChanged("Selector");
                }
            }
        }
    }
}
